独立使用 APO Trace 模块实现 Trace 数据监控功能
简介
- APO-one-agent 默认开启并支持全量采集多种类型的可观测数据,包括 Trace、Metrics 和 Logs。用户可根据自身需求,灵活配置 APO-one-agent 的数据采集范围,以适应用户环境中现有的数据类型。
- APO 监控 Trace 数据相较于传统的 Trace 数据采集监控,可以实现为应用自动注入 Trace 配置,拥有更高的集成度与兼容性并可以实现快速部署。
- 本文档介绍 APO 如何独立监控 Trace 数据,并介绍如何配置 APO 独立采集并监控 Trace 数据。
与传统方式对比
传统的 Trace 数据采集: 目前两大较为流行的 Trace 体系——Skywalking 和 Opentelemetry,以 JAVA 为例都需要手动配置 Trace 探针,并部署 Skywalking 或者 OTEL采集器,最后将数据导入到 ElasticSearch 数据库并查询,应用配置 Trace 探针繁琐,探针配置更新不易同步;且 ElasticSearch 性能消耗资源多,成本高。
APO 实现的 Trace 数据采集: 使用 OneAgent 的自动注入方案,为应用自动注入对应的环境变量以及 Trace 探针文件,只需要重启应用即可自动完成注入;兼容 Skywalking 以及 Opentelemetry 数据格式,将所有 Trace 数据发送到 OTEL Collector 转换后推送 Jaeger Collector存储至 Clickhouse。APO 自动计算统计 Trace 信息,并内嵌 Jaeger UI 用于查询全量的 Trace 数据。所有组件集成于一次部署中,实现系统的快速搭建与监控能力的全面覆盖。
实现原理
OneAgent 配置 OTEL 探针采集 Trace 数据
应用产生 Trace 数据后会同一将数据传输给当前节点的 APO-one-agent 中的 OTEL Collector Agent 中,同时也支持您将已有的应用探针的 OAP地址指向 APO 中使用并关联其他数据。数据在 OTEL Collector 中会被自动转换成 OTEL 数据格式,并被推送到服务端 Jaeger 存储。
自动配置多种编程语言应用 Trace 探针
相较于传统的 Trace 数据采集,APO-one-agent 采用自动配置的方式,使用 Odiglet 将 Trace 数据采集所需要的配置与文件注入到配置的目标服务当中。
APO-one-agent 自动注入探针默认使用流行的 OTEL 开源探针方案:
- Java agent: opentelemetry-java-instrumentation v2.8.0
- Python agent: opentelemetry-python 1.23.0/0.44b0
- NodeJs agent: opentelemetry-js v1.24.1/0.51.1
- Go agent: Grafana Beyla v1.8.4
假如您已经使用了 Skywalking 或者 OTEL 的应用探针来采集数据,我们也支持您使打包 APO-one-agent 的自定义探针镜像版本。
OTEL Collector 完成数据跨云、跨集群传输
通过使用 OTEL Collector,APO 实现了数据在跨云、跨集群环境中的高效传输。OTEL Collector 作为 OpenTelemetry 数据采集与传输的核心组件,支持多种协议和传输模式,确保无论数据源位于何处,都可以可靠地收集并传输到集中式的存储或监控平台。这种架构极大地增强了系统在多云和混合云环境中的灵活性,消除了不同云供应商或集群之间的数据孤岛问题。
APO 将 Trace 数据存储在 Clickhouse 中
ClickHouse 作为一款高性能的列式存储数据库,相较于 ElasticSearch,在处理高吞吐量写入和复杂查询操作方面表现得更加出色。由于其列式存储架构,ClickHouse 在面对大规模数据分析时能够显著提升查询速度,尤其在执行聚合、过滤等操作时表现出极高的效率,同等数据量下的存储空间占用更少,这进一步减少了资源消耗。APO 还支持将数据导入现有的 Clickhouse 实例,具体配置请参见生产环境部署建议。
利用 APO 集成的 Jaeger 查询全量 Trace 数据
APO 平台自带 Trace 数据分析,可以统计应用接口的平均响应时间,错误率和吞吐量的数据,统计这些数据的日环比与周环比;故障发生时,能给出具体发生错误的实例信息与故障 Trace 信息关联。APO 平台还能提供全量 Trace 数据检索功能,能快速筛选出延迟请求与错误请求产生的 Trace 数据;同时,APO 平台还提供内置的 Jaeger UI 用于全量 Trace 数据查询。
轻松拓展 Trace Metrics Log 一体化可观测平台
相较于传统的 Trace 监控体系,APO 不仅能够实现为应用自动注入 Trace 配置,还可以轻松扩 展至涵盖 Trace、Metrics 和 Log 的一体化可观测平台。通过这一平台,不同数据类型(如指标、链路追踪、日志)可以相互关联,提供完整的可观测性视图,帮助开发者和运维人员在性能调优、故障排查、异常监控等方面更加高效。APO 以一站式的方式搭建起涵盖全栈的可观测体系,极大简化了系统的管理和监控工作。
如何配置 APO 仅使用 Trace 监控模块
第一步:准备工作
要使用 Helm 安装 APO,请确保已完成以下操作:
- 在计算机上安装 Kubernetes 服务器。有关安装 Kubernetes 的信息,请参阅安装 Kubernetes。
- 安装 Helm 的最新稳定版本。有关安装 Helm 的信息,请参阅安装 Helm。
- 网络策略:需要 APO-one-agent 所在集群/机器能够访问 APO-server 集群的 30044、31363、31317、30319 端口。
第二步:设置 APO Helm 仓库
要设置 APO Helm 存储库,以便在计算机上下载正确的 APO Helm charts,请完成以下步骤:使用下方命令添加 apo
Helm 仓库
helm repo add apo https://apo-charts.oss-cn-hangzhou.aliyuncs.com
helm repo update apo
第三步:配置 APO 组件为独立采集 Trace 数据模式
创建文件apo-values.yaml
,并根据您的需求进行定义,并在部署阶段挂载配置。
本步骤配置 APO-server 数据模式为独立使用 Trace 模块数据模式。
# apo-values.yaml
# agentCollectorMode 为采集数据模式
global:
agentCollectorMode:
- trace
# APO-server
# 持久化配置,默认为false
# 生产环境:推荐打开
# POC阶段:可以使用非持久化配置进行快速部署
# 如果为持久化配置则需要根据PVC创建PV
altinity-clickhouse-operator:
clickhouse:
persistence:
enabled: true
victoria-metrics-single:
server:
persistentVolume:
enabled: true
apo-backend:
persistence:
enabled: true
这里提供的为 APO 部署的基础配置,如果您要进行更多配置更改,请从 APO Helm Charts 库中下载values.yaml
文件:
helm show values apo/apo > values.yaml
第四步:部署 APO-server
运行以下命令,挂载配置文件并部署 。
helm install apo apo/apo -n apo --create-namespace \
-f apo-values.yaml
第五步:配置 APO-one-agent 仅使用 Trace 监控模块
创建文件apo-one-agent-values.yaml
,并根据您的需求进行定义,并在部署阶段挂载配置。
本步骤配置 APO-on-agent 数据模式为独立使用 Trace 模块数据模式。
# apo-one-agent-values.yaml
# apoServerIP 为 APO-server 所在的 ClusterIP
# agentCollectorMode 为采集数据模式
global:
apoServerIP: x.x.x.x # FIXME
agentCollectorMode:
- trace
这里提供的为 APO 部署的基础配置,如果您要进行更多配置更改,请从 APO Helm Charts 库中下载values.yaml
文件:
helm show values apo/apo-one-agent > values.yaml
第六步:部署 APO-one-agent
运行以下命令,挂载配置文件并部署 。
helm install apo-one-agent apo/apo-one-agent -n apo --create-namespace \
-f apo-one-agent-values.yaml
第七步:验证
执行下方命令查询 pod 运行状态
kubectl get po -n apo
卸载 APO-server
kubectl delete clickhouseinstallation apo -napo
helm uninstall apo -n apo
kubectl delete ns apo
卸载 APO-one-agent
helm uninstall apo-one-agent -n apo
kubectl delete ns apo